package carmensd.vista

import applicationModel.MapaMundiAppModel
import modelo.Pais
import org.uqbar.arena.layout.ColumnLayout
import org.uqbar.arena.layout.VerticalLayout
import org.uqbar.arena.widgets.Button
import org.uqbar.arena.widgets.Label
import org.uqbar.arena.widgets.List
import org.uqbar.arena.widgets.Panel
import org.uqbar.arena.widgets.tables.Column
import org.uqbar.arena.widgets.tables.Table
import org.uqbar.arena.windows.MainWindow
import org.uqbar.arena.windows.SimpleWindow
import org.uqbar.arena.windows.Window
import org.uqbar.arena.windows.WindowOwner
import exceptions.PaisNoSeleccionadoException
import applicationModel.PaisAppModel
import org.uqbar.arena.bindings.PropertyAdapter
import modelo.Lugar

class MapaMundiWindow extends SimpleWindow<MapaMundiAppModel>{
	
	new(WindowOwner parent, MapaMundiAppModel model) {
		super(parent, model)
	}
	
	override protected addActions(Panel panel) {
		
	}
	
	override protected createFormPanel(Panel panelMapaMundi) {
		this.setTitle("Mapamundi");
		panelMapaMundi.setLayout(new ColumnLayout(3));
		this.vistaParteDerecha(panelMapaMundi);
		this.vistaParteIzquierda(panelMapaMundi);
	}
	
	
	def vistaParteIzquierda(Panel panel) {
		var Panel panelParteIzq = new Panel(panel);
		panelParteIzq.setLayout(new VerticalLayout());
		
		this.colocarTabla(panelParteIzq, "mapamundi.listaPaises", "paisSeleccionado");
		
		new Button(panelParteIzq) => [
			caption = "Nuevo";
			onClick [| this.abrirPais()]
		]
		
		new Button(panelParteIzq) => [
			caption = "Editar";
			onClick [| this.abrirPais(this.modelObject.paisSeleccionado)]
		]
			
		new Button(panelParteIzq) => [
			caption = "Eliminar";
			onClick [| this.getModelObject.removerPais()]
		]
	}
	
	//avenida henry ford 3295, Ricardo Rojas
	
	def abrirPais() {
		this.openSimpleWindow(new MainPaisWindow(this, new PaisAppModel("n", this.modelObject.mapamundi), "Nuevo Pais"))
	}
	
	def abrirPais(Pais pais) {
		if(pais != null){
			this.openSimpleWindow(new MainPaisWindow(this, new PaisAppModel("e", pais, this.modelObject.mapamundi), "Editar Pais"))
		}else{
			throw new PaisNoSeleccionadoException("elegir pais");
		}
	}
	
	def openSimpleWindow(Window w) {
		w.open
	}
	
	def colocarListaPais(Panel nuevoVillanoPanel, String propiedadDelDominio) {
			new List(nuevoVillanoPanel) => [
				allowNull(true)
				height = 90
				width = 150
				var binding = bindItemsToProperty(propiedadDelDominio)
                binding.setAdapter(new PropertyAdapter(typeof(Pais), "nombre"))
				bindItemsToProperty(propiedadDelDominio)
				//bindValueToProperty(propiedadDelDominio)
			]
	}
	
	def colocarListaLugar(Panel nuevoVillanoPanel, String propiedadDelDominio) {
			new List(nuevoVillanoPanel) => [
				allowNull(true)
				height = 90
				width = 150
				var binding = bindItemsToProperty(propiedadDelDominio)
                binding.setAdapter(new PropertyAdapter(typeof(Lugar), "nombreLugar"))
				bindItemsToProperty(propiedadDelDominio)
				//bindValueToProperty(propiedadDelDominio)
			]
	}
	
	def vistaParteDerecha(Panel panel){
		var Panel panelParteDer = new Panel(panel);
		panelParteDer.setLayout(new VerticalLayout());
		
		new Label(panelParteDer).setText("Nombre Pais");
		new Label(panelParteDer).bindValueToProperty("paisSeleccionado.nombre");
		
		new Label(panelParteDer).setText("caracteristicas");
		this.colocarLista(panelParteDer, "paisSeleccionado.caracteristicas");
		
		new Label(panelParteDer).setText("conexiones");
		this.colocarListaPais(panelParteDer, "paisSeleccionado.paisesConConexionAerea");
		
		new Label(panelParteDer).setText("lugares de interés");
		this.colocarListaLugar(panelParteDer, "paisSeleccionado.lugaresElegidos");
		
	}
	
	def openWindow(MainWindow<Pais> window) {
		window.open();
	}
	
	def colocarLista(Panel nuevoVillanoPanel, String propiedadDelDominio) {
		new List(nuevoVillanoPanel) => [
			allowNull(true)
			bindItemsToProperty(propiedadDelDominio)
			height = 90
		]
	}
	
	def colocarTabla(Panel panel, String items, String seleccionado) {
		var table = new Table<Pais>(panel, typeof(Pais))
		table.height = 90
		table.width = 120
		table.bindItemsToProperty(items)
		table.bindValueToProperty(seleccionado)
		this.describeResultsGrid(table)
	}
	
	def describeResultsGrid(Table<Pais> table) {
		new Column<Pais>(table)
			.setTitle("Pais")
			.bindContentsToProperty("nombre");
	}
}